MySQL রিপ্লিকেশন এবং হাই-অ্যাভেইলেবিলিটি দুটি গুরুত্বপূর্ণ কনসেপ্ট, যা ডেটাবেস সিস্টেমের পারফরম্যান্স, সুরক্ষা এবং ডাউনটাইম কমানোর জন্য ব্যবহৃত হয়। এগুলোর সাহায্যে ডেটাবেসের স্টেবিলিটি এবং নির্ভরযোগ্যতা বৃদ্ধি পায়, এবং একটি ডিস্ট্রিবিউটেড ডেটাবেস পরিবেশ তৈরি করা যায়।
1. MySQL রিপ্লিকেশন
MySQL রিপ্লিকেশন হল একটি প্রক্রিয়া, যেখানে একটি MySQL সার্ভারের ডেটা অন্য একটি সার্ভারে স্বয়ংক্রিয়ভাবে কপি করা হয়। এতে একটি Master-Slave (বা Primary-Secondary) আর্কিটেকচার থাকে, যেখানে একটি সার্ভার ডেটা লেখার জন্য ব্যবহৃত হয় এবং অন্য সার্ভারগুলি ডেটা পড়ার জন্য ব্যবহৃত হয়।
MySQL রিপ্লিকেশনের প্রধান ধরনের:
- Master-Slave Replication: একটি Master সার্ভারে ডেটা লেখার কাজ হয়, এবং Slave সার্ভারে ডেটা কপি করা হয়।
- Master-Master Replication: দুটি সার্ভারে একে অপরকে রিপ্লিকেট করা হয়, অর্থাৎ দুটি সার্ভারই Master হিসেবে কাজ করে।
- Circular Replication: তিনটি বা তার বেশি সার্ভারের মধ্যে রিপ্লিকেশন তৈরি করা হয়, যেখানে সার্ভারগুলোর মধ্যে তথ্য একটি চক্রবৃদ্ধি গতিতে পরিবর্তিত হয়।
Master-Slave Replication কনফিগারেশন:
Master Server Configuration:
my.cnf(বাmy.ini) ফাইলেserver-idএবংlog-binসেট করতে হবে।[mysqld] server-id = 1 log-bin = /var/log/mysql/mysql-bin.log binlog-do-db = your_database_nameSlave Server Configuration:
my.cnf(বাmy.ini) ফাইলেserver-idসেট করুন এবংrelay-logসক্ষম করুন।[mysqld] server-id = 2 relay-log = /var/log/mysql/mysql-relay-bin.log log-bin = /var/log/mysql/mysql-bin.logReplication Start:
Master সার্ভারেSHOW MASTER STATUSকমান্ডের মাধ্যমেFileএবংPositionবের করুন।SHOW MASTER STATUS;Slave সার্ভারে Replication Start: Slave সার্ভারে নিচের কুয়েরি চালান:
CHANGE MASTER TO MASTER_HOST = 'master_ip', MASTER_USER = 'replication_user', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'master_log_file', MASTER_LOG_POS = master_log_position; START SLAVE;
এটি রিপ্লিকেশন চালু করবে এবং Slave সার্ভারটি Master সার্ভারের ডেটা গ্রহণ শুরু করবে।
MySQL Replication এর সুবিধা:
- লক্ষণীয় পড়া-লিখা পারফরম্যান্স: লেখার কাজ Master সার্ভারে এবং পড়ার কাজ Slave সার্ভারে সরিয়ে নিয়ে পারফরম্যান্স উন্নত করা যায়।
- ব্যাকআপ সুবিধা: Slave সার্ভারের সাহায্যে ব্যাকআপ নেওয়া সহজ।
- ডাউনটাইম কমানো: যদি Master সার্ভার ডাউন হয়ে যায়, তখন Slave সার্ভারকে প্রাইমারি সার্ভার হিসেবে পরিবর্তন করা যায়।
2. MySQL হাই-অ্যাভেইলেবিলিটি
MySQL হাই-অ্যাভেইলেবিলিটি এর মাধ্যমে ডেটাবেস সার্ভারের পারফরম্যান্স এবং নির্ভরযোগ্যতা বৃদ্ধি করা হয়। এটি এমন একটি পরিবেশ তৈরি করে, যেখানে সার্ভারের কোনও এক্সিডেন্টাল ডাউনটাইমের কারণে অ্যাপ্লিকেশন অপ্রতিবন্ধক থাকে।
MySQL হাই-অ্যাভেইলেবিলিটি কনফিগারেশন:
Master-Slave Replication with Failover:
Master-Slave রিপ্লিকেশন কনফিগারেশনের পাশাপাশি একটি failover mechanism সেটআপ করা হয়। যদি Master সার্ভার ডাউন হয়ে যায়, তখন Slave সার্ভারকে দ্রুত Master হিসেবে পরিবর্তন করা হয়।Tools for Failover:
- MHA (MySQL High Availability): MHA একটি জনপ্রিয় টুল যা MySQL-এর Master-Slave রিপ্লিকেশন ব্যবস্থা অটোমেটিক failover সেটআপ করতে সাহায্য করে।
- Orchestrator: Orchestrator একটি MySQL গ্লোবাল রিপ্লিকেশন টুল যা failover, ডেটাবেস শেডুলিং, এবং সার্ভার পর্যবেক্ষণ সরবরাহ করে।
MySQL Group Replication:
MySQL 5.7 এবং পরবর্তী ভার্সনে Group Replication একটি হাই-অ্যাভেইলেবিলিটি সিস্টেমের অংশ হিসেবে কাজ করে। এটি Multi-Primary বা Single-Primary মডেলে কাজ করতে পারে, যেখানে একটি সার্ভার প্রাইমারি থাকে এবং অন্যান্য সার্ভার সেকেন্ডারি হিসেবে থাকে।CREATE TABLE t (i INT); SET GLOBAL group_replication_group_name = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'; SET GLOBAL group_replication_local_address = '127.0.0.1:3306'; SET GLOBAL group_replication_group_seeds = '127.0.0.1:3306,127.0.0.2:3306'; START GROUP_REPLICATION;Group Replication এর সুবিধা:
- Fully Synchronous: Group Replication সিস্টেমের মধ্যে সার্ভারগুলো একই ডেটা সিঙ্ক্রোনাইজ করে রাখে।
- Automatic Failover: সার্ভার ডাউন হলে, অন্য একটি সার্ভার স্বয়ংক্রিয়ভাবে Master হিসেবে নিয়োগ নেয়।
MySQL InnoDB Cluster:
MySQL ইনোডিবি ক্লাস্টার একটি সুরক্ষিত এবং রিয়েল-টাইম ক্লাস্টার সলিউশন যা Group Replication এবং MySQL Router ব্যবহার করে। এটি উচ্চ কার্যকারিতা এবং স্বয়ংক্রিয় failover সমর্থন করে।InnoDB Cluster Setup:
- MySQL ইনোডিবি ক্লাস্টার সার্ভারগুলিকে একটি ক্লাস্টারে একত্রিত করে এবং ডেটা সিঙ্ক্রোনাইজড রাখে।
- MySQL Router ক্লাস্টার থেকে ক্লায়েন্টের জন্য সঠিক সার্ভার রুটিং নিশ্চিত করে।
MySQL Cluster (NDB Cluster):
MySQL Cluster (NDB) একটি বিশেষ ধরনের হাই-অ্যাভেইলেবিলিটি সিস্টেম যা ডেটা শেয়ারিং এবং ক্লাস্টারিং প্রযুক্তি ব্যবহার করে। এটি বিশেষভাবে ডিসট্রিবিউটেড এবং হাই-অ্যাভেইলেবিলিটি ডেটাবেস অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত।NDB Cluster Setup:
- Data Node: এটি ডেটা সংরক্ষণের কাজ করে।
- Management Node: এটি ক্লাস্টারের কনফিগারেশন এবং স্টেটাস ট্র্যাক করে।
- SQL Node: এটি ডেটাবেস ক্লায়েন্ট অ্যাপ্লিকেশনের সাথে যোগাযোগের মাধ্যম।
3. MySQL Replication এবং High Availability এর মধ্যে পার্থক্য
| ফিচার | Replicatio | High Availability |
|---|---|---|
| লক্ষ্য | ডেটা কপি করা এবং ব্যাকআপ করা | ডেটাবেসের সিস্টেমের ধারাবাহিকতা নিশ্চিত করা |
| টুলস | Master-Slave, Master-Master, Group Replication | MHA, Orchestrator, InnoDB Cluster |
| Failover | ম্যানুয়াল বা অটোমেটিক | স্বয়ংক্রিয় এবং দ্রুত |
| ডেটা সিঙ্ক্রোনাইজেশন | সিঙ্ক্রোনাইজড, তবে কিছু লেটেন্সি থাকতে পারে | সিঙ্ক্রোনাইজড এবং ইনস্ট্যান্ট আপডেট |
সারাংশ
MySQL Replication এবং High Availability ডেটাবেসের পারফরম্যান্স, সুরক্ষা এবং নির্ভরযোগ্যতা নিশ্চিত করার জন্য ব্যবহৃত হয়। রিপ্লিকেশন ডেটার কপি তৈরি করে, যা ব্যাকআপ এবং লোড ব্যালেন্সিংয়ের জন্য উপকারী। High Availability সিস্টেম ডেটাবেসের সর্বোচ্চ পাওয়াবিলিটি নিশ্চিত করে, বিশেষ করে যদি কোনো সার্ভার ডাউন হয়ে যায়, তখন দ্রুত একটি নতুন সার্ভার স্বয়ংক্রিয়ভাবে ম্যানেজমেন্ট নেয়।
MySQL Replication হল একটি প্রক্রিয়া যার মাধ্যমে একটি MySQL সার্ভারের ডেটা অন্য একটি সার্ভারে কপি করা হয়। এই প্রক্রিয়াটি মূলত Master-Slave আর্কিটেকচারে কাজ করে, যেখানে একটিকে Master Server হিসেবে নিয়ন্ত্রণ করা হয় এবং অন্যটি Slave Server হিসেবে কাজ করে।
Replication ব্যবহারের মাধ্যমে আপনি আপনার ডেটাবেসের high availability (উচ্চ প্রাপ্যতা), data redundancy (ডেটার অনুলিপি), এবং load balancing নিশ্চিত করতে পারেন।
MySQL Replication কী?
MySQL Replication হল একটি ডেটাবেস প্রযুক্তি, যেখানে একটি Master Server থেকে ডেটা কপি করা হয় এবং একটি বা একাধিক Slave Servers এ সিঙ্ক্রোনাইজড ভাবে আপডেট হয়। এটি একটি Asynchronous বা Synchronous প্রক্রিয়া হতে পারে, তবে সাধারণত MySQL Replication Asynchronous হয়, যার মানে হলো Slave Server ডেটা আপডেটের জন্য Master Server এর সাথে সঠিকভাবে সিঙ্ক্রোনাইজ হতে কিছু বিলম্ব থাকতে পারে।
Replication Architecture
- Master Server: মূল সার্ভার যা ডেটা পরিবর্তন করে (যেমন ইনসার্ট, আপডেট, ডিলিট)।
- Slave Server(s): একটি বা একাধিক সার্ভার যা Master থেকে ডেটা কপি করে এবং সেগুলোর সাথে সিঙ্ক্রোনাইজ থাকে।
MySQL Replication প্রয়োজন কেন?
MySQL Replication এর বেশ কিছু সুবিধা এবং প্রয়োজনীয়তা রয়েছে, যা বিভিন্ন ক্ষেত্রে খুবই উপকারী হতে পারে। নীচে কিছু গুরুত্বপূর্ণ কারণে MySQL Replication প্রয়োজনীয়:
1. Data Redundancy (ডেটা অনুলিপি)
Replication ডেটার অনুলিপি তৈরি করে, যা একটি ব্যাকআপ সিস্টেম হিসেবে কাজ করতে পারে। এটি ডেটার নিরাপত্তা নিশ্চিত করে, কারণ একাধিক সার্ভারে ডেটা স্টোর করা থাকে।
- উদাহরণ: যদি Master Server এ কোন সমস্যা দেখা দেয়, তবে Slave Server থেকে ডেটা পুনরুদ্ধার করা যেতে পারে।
2. High Availability (উচ্চ প্রাপ্যতা)
Replication নিশ্চিত করে যে সার্ভারে ডেটা থাকা সত্ত্বেও, সার্ভিস ডাউন না হয়। একাধিক Slave Server থাকতে পারে, তাই যদি একটি Slave Server ডাউন হয়ে যায়, অন্য একটি Slave Server থেকে সেবা চালু রাখা যেতে পারে।
- উদাহরণ: যদি Master Server বিপর্যস্ত হয়, তাহলে Slave Server কে নতুন Master হিসেবে প্রচলিত করা যায়।
3. Load Balancing (লোড ব্যালান্সিং)
Replication এর মাধ্যমে ডেটা অনেক সার্ভারে ভাগ করে দেয়া যায়, যার ফলে read-heavy অ্যাপ্লিকেশনগুলিতে লোড ব্যালান্স করা সম্ভব হয়। Master Server শুধুমাত্র লিখিত (write) অপারেশন প্রক্রিয়া করে, এবং Slave Server গুলো পড়া (read) অপারেশনে সহায়তা করে।
- উদাহরণ: ইউজাররা Slave Server থেকে ডেটা পড়তে পারে, এবং Master Server শুধুমাত্র ডেটা আপডেট বা নতুন ইনসার্ট করে।
4. Disaster Recovery (দুর্যোগ পুনরুদ্ধার)
Replication ডেটাবেসের জন্য একটি দুর্যোগ পুনরুদ্ধার কৌশল হিসেবে কাজ করতে পারে। যখন ডেটাবেসের মূল সার্ভার (Master) সমস্যায় পড়ে, তখন Slave Server থেকে পুনরুদ্ধার করা সম্ভব।
- উদাহরণ: Master Server হারানো হলে, Slave Server এর ডেটা ব্যবহার করে পুনরায় ডেটাবেস চালু করা যায়।
5. Data Distribution (ডেটা বিতরণ)
Replication ডেটা বিভিন্ন জিওগ্রাফিকাল অবস্থানে ভাগ করতে সাহায্য করতে পারে। এটি ব্যবহারকারীদের কাছে ডেটার সেবা আরও দ্রুত পৌঁছে দেয়।
- উদাহরণ: বিভিন্ন দেশে থাকা অফিসের মধ্যে ডেটা বিতরণ করা, যাতে প্রত্যেক অফিস নিজস্ব Slave Server থেকে ডেটা পড়তে পারে।
6. Offline Processing (অফলাইন প্রোসেসিং)
Replication দিয়ে আপনি একটি Slave Server ব্যবহার করে ব্যাকগ্রাউন্ডে বা অফলাইন প্রোসেসিং করতে পারেন। আপনি নির্দিষ্ট কাজগুলি, যেমন রিপোর্ট জেনারেশন বা ডেটা বিশ্লেষণ, Slave Server এ করতে পারেন, যা Master Server এর উপর চাপ কমায়।
MySQL Replication Types
MySQL Replication এর প্রধান তিনটি ধরন রয়েছে:
- Asynchronous Replication (অ্যাসিঙ্ক্রোনাস রেপ্লিকেশন):
- এটি সবচেয়ে সাধারণ এবং ডিফল্ট replication পদ্ধতি। এখানে Master Server একে অপরকে সিঙ্ক্রোনাইজ না করে ডেটা পরিবর্তন করে, এবং Slave Server এ তা পরবর্তীতে প্রতিফলিত হয়।
- এতে কিছু বিলম্ব হতে পারে, কিন্তু এটি সাধারণত অধিক লোড সহনীয়।
- Synchronous Replication (সিঙ্ক্রোনাস রেপ্লিকেশন):
- এতে, Master এবং Slave সিঙ্ক্রোনাইজভাবে কাজ করে এবং Slave Server এর পরিবর্তনগুলি কমপ্লিট হওয়ার আগে Master সিস্টেম কনফার্ম করে না।
- এই পদ্ধতিতে ডেটা একসাথে (real-time) প্রতিফলিত হয়, তবে এর পারফরমেন্স সমস্যা হতে পারে।
- Semi-Synchronous Replication (সেমি-সিঙ্ক্রোনাস রেপ্লিকেশন):
- এই পদ্ধতিতে Master Server ডেটা জমা হওয়ার পর Slave Server কমপ্লিট হলে, Master সার্ভার নিশ্চিত করে যে ডেটা সফলভাবে প্রতিফলিত হয়েছে।
- এটি Asynchronous এবং Synchronous এর মধ্যে একটি সংমিশ্রণ।
Replication Configuration (রেপ্লিকেশন কনফিগারেশন)
- Master Server Configuration:
server-id: প্রতিটি সার্ভারের একটি ইউনিক আইডি থাকতে হবে।log-bin: Master Server এ বাইনারি লগিং সক্ষম করতে হবে।binlog-do-db: রেপ্লিকেশন শুধুমাত্র নির্দিষ্ট ডেটাবেসের জন্য হবে।
[mysqld]
server-id = 1
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db = my_database
- Slave Server Configuration:
server-id: Slave Server এর জন্য একটি ইউনিক আইডি থাকতে হবে।relay-log: Slave Server এ রিলে লগিং সক্ষম করতে হবে।replicate-do-db: রেপ্লিকেশন শুধুমাত্র নির্দিষ্ট ডেটাবেসের জন্য হবে।
[mysqld]
server-id = 2
relay-log = /var/log/mysql/mysql-relay.log
replicate-do-db = my_database
- Start Replication:
- Master Server এ
SHOW MASTER STATUS;কমান্ড ব্যবহার করে বাইনারি লগ ফাইল এবং পজিশন জানুন। - Slave Server এ রেপ্লিকেশন শুরু করার জন্য
CHANGE MASTER TOকমান্ড ব্যবহার করুন।
- Master Server এ
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='replication_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS= 107;
START SLAVE;
Replication Monitoring and Troubleshooting
Replication সেটআপ করার পর এটি মনিটর করা এবং সঠিকভাবে কাজ করছে কিনা তা পরীক্ষা করা গুরুত্বপূর্ণ।
Check Slave Status:
SHOW SLAVE STATUS\G;এটি Slave Server এর বর্তমান স্ট্যাটাস দেখাবে এবং নিশ্চিত করবে যে রেপ্লিকেশন চলমান রয়েছে।
- Troubleshooting:
- যদি Slave সার্ভার Not Syncing থাকে, তবে এর
Last_Errorফিল্ডে এর কারণ দেখা যাবে। আপনি রেপ্লিকেশন পুনরায় শুরু করতে পারেন:
STOP SLAVE; START SLAVE;
- যদি Slave সার্ভার Not Syncing থাকে, তবে এর
সারাংশ
MySQL Replication হলো একটি অত্যন্ত কার্যকরী পদ্ধতি যা ডেটা redundancy, high availability, load balancing, এবং disaster recovery নিশ্চিত করে। এটি একটি Master-Slave আর্কিটেকচার তৈরি করে, যেখানে Master Server থেকে ডেটা একটি বা একাধিক Slave Server-এ কপি করা হয়। Replication সিস্টেম ডেটাবেসের উচ্চ প্রাপ্যতা, কার্যক্ষমতা, এবং সার্ভিসের নিরবচ্ছিন্নতা নিশ্চিত করতে গুরুত্বপূর্ণ।
Master-Slave Replication হল MySQL-এর একটি ক্ষমতা যা একটি Master সার্ভার থেকে Slave সার্ভারে ডেটা কপি বা সিঙ্ক্রোনাইজ করার জন্য ব্যবহৃত হয়। এটি ডেটা ব্যাকআপ, স্কেলেবিলিটি এবং উচ্চ অ্যাভেইলেবিলিটি নিশ্চিত করতে সহায়ক। Master সার্ভার হল যেখানে সমস্ত লেখার (write) অপারেশন ঘটে, এবং Slave সার্ভারগুলি শুধুমাত্র পড়া (read) অপারেশন সম্পাদন করে।
নিচে Master-Slave Replication সেটআপ করার জন্য ধাপে ধাপে গাইড দেওয়া হলো:
1. Master সার্ভারে কনফিগারেশন
1.1. my.cnf ফাইল এডিট করা
Master সার্ভারের কনফিগারেশন শুরু করতে, প্রথমে MySQL কনফিগারেশন ফাইল (my.cnf বা my.ini) এ কিছু প্যারামিটার যোগ করতে হবে। সাধারণত, এই ফাইলটি /etc/my.cnf বা /etc/mysql/my.cnf অবস্থানে থাকে। এই ফাইলটি খোলার জন্য নিচের কমান্ড ব্যবহার করুন:
sudo nano /etc/my.cnf
কনফিগারেশনে নিচের প্যারামিটারগুলো যোগ করুন বা পরিবর্তন করুন:
[mysqld]
server-id = 1 # Master server ID
log_bin = /var/lib/mysql/mysql-bin # Enable binary logging
bind-address = 0.0.0.0 # Allow connections from any IP (be cautious in production)
binlog-do-db = your_database_name # The database to replicate (optional)
- server-id: এটি প্রতিটি সার্ভারের জন্য ইউনিক হতে হবে। Master সার্ভারের জন্য
server-id = 1রাখা হয়েছে। - log_bin:
log_binকে এনেবল করতে হবে, কারণ Replication চলার সময় সমস্ত ট্রানজেকশন binary log-এ লেখা হবে। - bind-address: অন্য সার্ভার থেকে কানেকশন করার জন্য এটি
0.0.0.0রাখতে পারেন (তবে নিরাপত্তার জন্য শুধুমাত্র নির্দিষ্ট IP অ্যাড্রেস দিন)। - binlog-do-db: আপনি যদি নির্দিষ্ট একটি ডেটাবেসের রেপ্লিকেশন করতে চান, তবে এই অপশনটি ব্যবহার করতে পারেন। যদি সমস্ত ডেটাবেসের রেপ্লিকেশন করতে চান, তাহলে এই লাইনটি না রাখুন।
1.2. MySQL Restart করা
কনফিগারেশন ফাইলের পরিবর্তন প্রযোজ্য করতে MySQL সার্ভার রিস্টার্ট করুন:
sudo systemctl restart mysqld
1.3. Replication User তৈরি করা
Master সার্ভারে একটি replication user তৈরি করুন, যাতে Slave সার্ভারটি Master সার্ভারের লগ দেখতে পারে।
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;
- replica_user: Replication এর জন্য ইউজারের নাম।
- replica_password: ইউজারের পাসওয়ার্ড।
2. Slave সার্ভারে কনফিগারেশন
2.1. my.cnf ফাইল এডিট করা
Slave সার্ভারের কনফিগারেশন ফাইলেও কিছু প্যারামিটার যোগ করতে হবে। /etc/my.cnf অথবা /etc/mysql/my.cnf ফাইলটি খুলুন এবং নিচের কনফিগারেশনটি যোগ করুন:
[mysqld]
server-id = 2 # Slave server ID (must be different from Master)
relay-log = /var/lib/mysql/mysql-relay-bin # Enable relay logging
log-bin = /var/lib/mysql/mysql-bin # Enable binary logging (optional)
read-only = 1 # Prevent writes to the slave
- server-id: এটি Slave সার্ভারের জন্য ইউনিক হতে হবে। এখানে
server-id = 2রাখা হয়েছে। - relay-log: Slave সার্ভার যেখান থেকে Master সার্ভারের লগ গ্রহণ করবে, সেই স্থানে relay log ফাইল রাখা হবে।
- read-only: Slave সার্ভারের
read-onlyমোডে থাকার জন্য এই প্যারামিটারটি সেট করা হয়।
2.2. MySQL Restart করা
Slave সার্ভারে পরিবর্তন কার্যকর করতে MySQL রিস্টার্ট করুন:
sudo systemctl restart mysqld
2.3. Slave সার্ভারে Replication Start করা
Slave সার্ভারে Master সার্ভারের সাথে সংযোগ স্থাপন করতে এবং replication শুরু করতে নিচের কমান্ডগুলো ব্যবহার করুন:
CHANGE MASTER TO
MASTER_HOST='master_ip_address', -- Master server IP address
MASTER_USER='replica_user', -- Replication user created on Master
MASTER_PASSWORD='replica_password', -- Replication user's password
MASTER_LOG_FILE='mysql-bin.000001', -- The binary log file to start replication from (can get this from Master)
MASTER_LOG_POS= 107; -- The position of the log file to start replication from (can get this from Master)
- MASTER_HOST: Master সার্ভারের IP ঠিকানা।
- MASTER_USER: Master সার্ভারে তৈরি করা replication ইউজারের নাম।
- MASTER_PASSWORD: Replication ইউজারের পাসওয়ার্ড।
- MASTER_LOG_FILE: Master সার্ভারের binary log file নাম (এটি Master সার্ভারের
SHOW MASTER STATUSথেকে পাওয়া যাবে)। - MASTER_LOG_POS: Master সার্ভারের log position (এটি
SHOW MASTER STATUSথেকে পাওয়া যাবে)।
2.4. Replication Start করা
Replication শুরু করতে নিচের কমান্ডটি চালান:
START SLAVE;
2.5. Slave সার্ভারের স্ট্যাটাস চেক করা
Replication সফলভাবে চলছে কিনা তা পরীক্ষা করতে:
SHOW SLAVE STATUS\G;
এটি Slave_IO_Running এবং Slave_SQL_Running কলামে Yes দেখালে, Replication সফলভাবে কাজ করছে।
3. Master থেকে Binary Log Status দেখা
Master সার্ভারে চলমান binary logs দেখতে:
SHOW MASTER STATUS;
এটি আপনাকে File এবং Position দেখাবে, যা আপনি Slave সার্ভারে ব্যবহার করবেন।
4. Replication Monitoring
Replication চলছে কিনা, তা নিয়মিত মনিটর করা গুরুত্বপূর্ণ। আপনি Slave সার্ভারে SHOW SLAVE STATUS ব্যবহার করতে পারেন:
SHOW SLAVE STATUS\G;
এটি আপনাকে ডেটাবেসের বর্তমান replication অবস্থা দেখাবে। গুরুত্বপূর্ণ ফিল্ডগুলি হল:
- Slave_IO_Running:
Yesহলে I/O থ্রেডটি ঠিকভাবে কাজ করছে। - Slave_SQL_Running:
Yesহলে SQL থ্রেডটি ঠিকভাবে কাজ করছে। - Last_Error: যদি কোনো সমস্যা ঘটে, তাহলে এখানে তা দেখানো হবে।
সারাংশ
Master-Slave Replication MySQL-এ ডেটার ব্যাকআপ, হাই অ্যাভেইলেবিলিটি এবং স্কেলেবিলিটির জন্য খুবই গুরুত্বপূর্ণ। এটি মূলত Master সার্ভারে লেখা (write) অপারেশন এবং Slave সার্ভারে পড়া (read) অপারেশন সঞ্চালনের জন্য ব্যবহৃত হয়। Master সার্ভারের binary logs Slave সার্ভারে relay logs হিসাবে ব্যবহার করা হয় এবং ডেটা সিঙ্ক্রোনাইজ করা হয়। Replication কনফিগারেশনে server-id, log-bin, relay-log, এবং replica_user তৈরি করার মতো প্যারামিটার সেট করতে হয়। START SLAVE কমান্ডের মাধ্যমে replication শুরু করতে হয় এবং SHOW SLAVE STATUS এর মাধ্যমে পরিস্থিতি পর্যবেক্ষণ করা হয়।
Master-Master Replication MySQL এর একটি বিশেষ কনফিগারেশন, যেখানে দুটি MySQL সার্ভার একে অপরকে রেপ্লিকেট করে, অর্থাৎ একটি সার্ভার Master হিসাবে কাজ করে এবং অপরটি একইভাবে Master হয়ে অন্য সার্ভারকে রেপ্লিকেট করে। এটি একটি দ্বৈত রেপ্লিকেশন কনফিগারেশন, যেখানে দুটি সার্ভারই একে অপরের ডেটা সিঙ্ক্রোনাইজ করে। এতে করে ডেটাবেসের উচ্চ অ্যাভেইলেবিলিটি এবং ব্যালান্সড লোড অর্জন করা যায়।
Master-Master Replication কেন প্রয়োজন?
- হাই অ্যাভেইলেবিলিটি (High Availability):
- এক সার্ভার ডাউন হলে, অন্য সার্ভারটি কাজ চালিয়ে যেতে পারে, যাতে সিস্টেমের কোনো বিঘ্ন ঘটবে না।
- লোড ব্যালান্সিং:
- দুইটি সার্ভারের মধ্যে ডেটার আপডেট সমানভাবে ভাগ করে নেওয়া হয়, ফলে লোড ব্যালান্সিংয়ের মাধ্যমে কর্মক্ষমতা বৃদ্ধি পায়।
- ডেটাবেসের অ্যাক্সেস পাথ:
- ব্যবহারকারীরা উভয় সার্ভার থেকে ডেটা অ্যাক্সেস করতে পারেন, যা সার্ভার একটিতে ব্যর্থ হলে অন্যটি স্বয়ংক্রিয়ভাবে কাজ চালিয়ে যায়।
Master-Master Replication কনফিগারেশন
ধাপ ১: প্রাথমিক প্রস্তুতি
আপনার দুটি সার্ভারে MySQL ইনস্টল করা থাকা উচিত এবং উভয় সার্ভারের মধ্যে নেটওয়ার্ক কানেকটিভিটি থাকতে হবে। এর মধ্যে একটি সার্ভার "Master1" এবং অন্যটি "Master2" হিসেবে কাজ করবে।
MySQL ইনস্টল করুন:
- দুইটি সার্ভারে MySQL ইনস্টল করা থাকতে হবে। যদি না থাকে, তবে আপনি MySQL ইনস্টল করে নিন:
sudo apt-get update sudo apt-get install mysql-server- নেটওয়ার্ক কানেকটিভিটি:
- নিশ্চিত করুন যে সার্ভার দুটি একে অপরকে পিং করতে পারে এবং পোর্ট 3306 খোলা আছে।
ধাপ ২: MySQL কনফিগারেশন ফাইল সম্পাদনা
Master1 এবং Master2 উভয় সার্ভারের জন্য একই কনফিগারেশন প্রক্রিয়া অনুসরণ করতে হবে।
MySQL কনফিগারেশন ফাইল সম্পাদনা:
my.cnfফাইলটি প্রতিটি সার্ভারে সম্পাদনা করুন:sudo nano /etc/mysql/my.cnfকনফিগারেশন ফাইলে নিচের লাইনগুলো যোগ করুন (প্রতিটি সার্ভারে আলাদা আলাদা আইডি এবং লোকাল আইপি ব্যবহার করবেন):
Master1:
[mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog-do-db = my_database replicate-same-server-id = 0 auto_increment_increment = 2 auto_increment_offset = 1Master2:
[mysqld] server-id = 2 log_bin = /var/log/mysql/mysql-bin.log binlog-do-db = my_database replicate-same-server-id = 0 auto_increment_increment = 2 auto_increment_offset = 2server-id: প্রতিটি সার্ভারের জন্য ইউনিক আইডি দিতে হবে।log_bin: বাইনারি লগ ফাইলটি সক্রিয় করতে হবে যাতে রেপ্লিকেশন সম্ভব হয়।binlog-do-db: আপনি কোন ডেটাবেসের জন্য রেপ্লিকেশন করতে চান তা নির্ধারণ করুন।auto_increment_incrementএবংauto_increment_offset: এই সেটিংগুলি নিশ্চিত করে যে ইনক্রিমেন্টাল ID গুলি দুটি সার্ভারের মধ্যে সংঘর্ষ করবে না।
MySQL সার্ভিস রিস্টার্ট করুন:
কনফিগারেশন পরিবর্তনের পর, MySQL সার্ভিস রিস্টার্ট করুন:
sudo systemctl restart mysql
ধাপ ৩: ইউজার এবং রেপ্লিকেশন সিড তৈরী করা
প্রতিটি সার্ভারের জন্য একটি রেপ্লিকেশন ইউজার তৈরি করতে হবে, যাতে সার্ভার দুটি একে অপরকে রেপ্লিকেট করতে পারে।
Master1 (অথবা Master2) এ ইউজার তৈরি করুন:
MySQL-এ লগইন করুন:
mysql -u root -pরেপ্লিকেশন ইউজার তৈরি করুন:
CREATE USER 'replica'@'%' IDENTIFIED BY 'replica_password'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES;Master1 এ সিড (Binlog Position) সংগ্রহ করুন:
রেপ্লিকেশন শুরু করার জন্য Master1 এর বাইনারি লগ পজিশন সংগ্রহ করতে হবে:
SHOW MASTER STATUS;এটি আপনাকে
FileএবংPositionনামের দুটি ফিল্ড প্রদান করবে। এই মানগুলি Master2 সার্ভারে ব্যবহার করতে হবে।
ধাপ ৪: Slave Configuration
এখন Master2 সার্ভারে রেপ্লিকেশন কনফিগার করুন। প্রথমে Master1 এর বাইনারি লগ পজিশন ব্যবহার করে রেপ্লিকেশন শুরু করুন।
Master2 এ রেপ্লিকেশন কনফিগার করুন:
MySQL-এ লগইন করুন:
mysql -u root -pরেপ্লিকেশন কনফিগারেশন সেট করুন:
CHANGE MASTER TO MASTER_HOST = 'Master1_IP', MASTER_USER = 'replica', MASTER_PASSWORD = 'replica_password', MASTER_LOG_FILE = 'mysql-bin.000001', -- 'File' এর মান MASTER_LOG_POS = 123; -- 'Position' এর মানSlave শুরু করুন:
START SLAVE;Slave status চেক করুন:
রেপ্লিকেশন সঠিকভাবে চলছে কিনা তা দেখতে:
SHOW SLAVE STATUS\Gএখানে
Slave_IO_RunningএবংSlave_SQL_Runningদুটি ফিল্ডের মানYesহওয়া উচিত।
ধাপ ৫: Master2 থেকে Master1 এ রেপ্লিকেশন কনফিগার করুন
এখন Master2 থেকে Master1 এর রেপ্লিকেশন কনফিগার করুন। পুনরায় উপরের ধাপ অনুসরণ করুন, তবে এবার MASTER_HOST = 'Master2_IP' হবে এবং প্রয়োজনীয় File ও Position মানগুলি ব্যবহার করুন।
ধাপ ৬: রেপ্লিকেশন যাচাই
ডেটা আপডেট করুন এবং যাচাই করুন:
এখন আপনি Master1 এবং Master2 উভয় সার্ভারে ডেটা আপডেট করে পরীক্ষা করতে পারেন। উদাহরণস্বরূপ:
INSERT INTO my_database.my_table (column1, column2) VALUES ('value1', 'value2');এই আপডেটটি দুইটি সার্ভারেই সিঙ্ক্রোনাইজ হবে।
টেবিলের ডেটা চেক করুন:
উভয় সার্ভারে
SELECTকরে দেখুন যে ডেটা সিঙ্ক্রোনাইজ হয়েছে কি না।SELECT * FROM my_database.my_table;
সারাংশ
MySQL Master-Master Replication কনফিগারেশন দুটি সার্ভারের মধ্যে ডেটা সিঙ্ক্রোনাইজেশন বজায় রাখতে সাহায্য করে এবং এটি হাই অ্যাভেইলেবিলিটি ও লোড ব্যালান্সিং নিশ্চিত করে। এই কনফিগারেশনে প্রতিটি সার্ভারই একে অপরকে রেপ্লিকেট করে এবং দুটি সার্ভারই Master হিসেবে কাজ করে, ফলে ডেটা রিড এবং রাইট অ্যাক্সেস একে অপরের সাথে ভাগ করা যায়।
MySQL replication হল এক বা একাধিক সার্ভারের মধ্যে ডেটা সিঙ্ক্রোনাইজেশন প্রযুক্তি, যেখানে একটি Master সার্ভার থেকে Slave সার্ভারে ডেটা কপি বা রেপ্লিকেট করা হয়। MySQL-এর রেপ্লিকেশন দুটি প্রধান মোডে কাজ করে: Asynchronous Replication এবং Semi-Synchronous Replication। প্রতিটি মোডের নিজস্ব সুবিধা এবং ট্রেড-অফ আছে, এবং সেগুলি সিস্টেমের পারফরম্যান্স এবং ডেটা সুরক্ষার দৃষ্টিকোণ থেকে আলাদা।
এখানে Asynchronous এবং Semi-Synchronous Replication এর মধ্যে পার্থক্য এবং প্রতিটির সুবিধা এবং অসুবিধা আলোচনা করা হয়েছে।
1. Asynchronous Replication
Asynchronous Replication হল MySQL এর ঐতিহ্যগত রেপ্লিকেশন মোড। এই মোডে, Master সার্ভার সমস্ত ট্রানজেকশন সম্পন্ন করার পরে তাদের binary logs তৈরি করে এবং Slave সার্ভারগুলো সেই binary logs সংগ্রহ করে এবং এগুলি প্রয়োগ করে।
কিভাবে কাজ করে:
- Master সার্ভার তার ডেটা আপডেট করার পর, পরিবর্তনগুলি binary log-এ লেখে।
- Slave সার্ভার Master এর binary log ফাইলগুলি পুল করে এবং তার ডেটাবেসে ওই পরিবর্তনগুলি প্রয়োগ করে।
- Master সার্ভার তার কাজ শেষ করার পর অন্য কোন সার্ভারের অপেক্ষা না করে পরবর্তী কাজ শুরু করতে পারে।
ফিচারস:
- No wait for acknowledgment: Master সার্ভার তার ট্রানজেকশন Slave সার্ভারকে প্রেরণ করার পর Slave থেকে কোন ধরনের acknowledgment (যেমন, confirmation) প্রত্যাশা করে না।
- Slave lag possible: Slave সার্ভার ডেটা প্রাপ্তির জন্য দেরি করতে পারে, অর্থাৎ Slave ডেটাবেস কখনও কখনও Master সার্ভারের পিছিয়ে থাকতে পারে।
সুবিধা:
- Performance: Asynchronous Replication খুব দ্রুত, কারণ Master সার্ভার দ্রুত কাজ শেষ করে এবং তার কাজের অপেক্ষা না করে পরবর্তী কাজ শুরু করতে পারে।
- Low Overhead: এই মোডে সার্ভারগুলোর মধ্যে কোন কঠোর সময় সীমা বা synchronous acknowledgment নেই, যা সিস্টেমের জন্য কম লোড তৈরি করে।
অসুবিধা:
- Data inconsistency: যদি Master সার্ভার বন্ধ হয়ে যায় বা ক্র্যাশ করে, তবে Slave সার্ভারের ডেটা Master এর ডেটা থেকে পিছিয়ে থাকতে পারে, কারণ Slave সার্ভার প্রাপ্ত তথ্যের অপেক্ষা করে না।
- Risk of data loss: কোনো কারণে Master সার্ভারের পরিবর্তনগুলি Slave সার্ভারে পৌঁছানোর আগে সার্ভার বন্ধ হয়ে গেলে, সেই পরিবর্তন হারিয়ে যেতে পারে।
2. Semi-Synchronous Replication
Semi-Synchronous Replication হল MySQL এর উন্নত সংস্করণ যা Asynchronous Replication এবং Synchronous Replication এর মধ্যে একটি ব্যালান্স প্রদান করে। এই মোডে, Master সার্ভার শুধুমাত্র তখনই ট্রানজেকশন কমপ্লিট করবে যখন Slave সার্ভারগুলি ট্রানজেকশনের binary log গ্রহণ করবে, তবে তারা ডেটা প্রয়োগ করতে বাধ্য নয়।
কিভাবে কাজ করে:
- Master সার্ভার তার binary log তৈরি করার পর, এটি Slave সার্ভারে পাঠায়।
- Master সার্ভার তখন তার ট্রানজেকশন Slave সার্ভারের acknowledgment (confirmation) পাওয়ার জন্য অপেক্ষা করবে।
- Slave সার্ভার ট্রানজেকশন গ্রহণ করে এবং Master সার্ভারকে ACK প্রেরণ করে, তবে Slave সার্ভারের জন্য ডেটা প্রয়োগ (apply) বাধ্যতামূলক নয়।
ফিচারস:
- Master waits for Slave acknowledgment: Master সার্ভার তার ট্রানজেকশন Slave সার্ভারের acknowledgment পাওয়ার আগে ট্রানজেকশনকে সম্পন্ন করবে না।
- Less lag than asynchronous: Slave সার্ভারের lag বা পিছিয়ে থাকার সম্ভাবনা কম থাকে।
- Slave not forced to apply: Slave সার্ভার শুধুমাত্র ট্রানজেকশন গ্রহণ করে, তবে তার apply বা ডেটা প্রয়োগ বাধ্যতামূলক নয়।
সুবিধা:
- Data consistency: Slave সার্ভারের সঙ্গে সিঙ্ক্রোনাইজেশন ভাল থাকে, তাই ডেটা হারানোর সম্ভাবনা কম থাকে।
- Better than asynchronous: Semi-Synchronous রেপ্লিকেশন asynchronous এর তুলনায় সিঙ্ক্রোনাইজেশনে কিছুটা উন্নত।
- Lower risk of data loss: যদি Master সার্ভার বন্ধ হয়, তবে কম ডেটা হারানোর সম্ভাবনা থাকে, কারণ Slave সার্ভার ট্রানজেকশন গ্রহণ করেছে এবং সিঙ্ক্রোনাইজেশন হয়েছে।
অসুবিধা:
- Performance impact: Master সার্ভারের Slave থেকে acknowledgment পাওয়ার জন্য অপেক্ষা করতে হয়, যা Asynchronous Replication এর তুলনায় কিছুটা ধীর হতে পারে।
- Slave lag: যদিও এটি Asynchronous Replication এর চেয়ে ভালো, তবে Slave সার্ভারের কিছু lag থাকতে পারে, যদিও তা কম হয়।
৩. Synchronous Replication (Synchronous Replica)
এটি আরো একটি ভিন্নধর্মী রেপ্লিকেশন কনফিগারেশন, যেখানে Master সার্ভার তার ট্রানজেকশন তখনই সম্পন্ন করবে, যখন Slave সার্ভার ট্রানজেকশনের সব ডেটা apply করবে এবং acknowledge করবে। তবে, MySQL এ এটি native ভাবে সমর্থিত নয় এবং অধিকাংশ রেপ্লিকেশন কনফিগারেশন Semi-Synchronous Replication হিসেবে থাকে।
Asynchronous vs Semi-Synchronous Replication
| Feature | Asynchronous Replication | Semi-Synchronous Replication |
|---|---|---|
| Master Completion Time | Very fast — Master doesn't wait for acknowledgment | Slower — Master waits for acknowledgment from Slave |
| Data Consistency | Possible inconsistency between Master and Slave | Better consistency than Asynchronous Replication |
| Risk of Data Loss | High — Possible data loss if Master crashes before Slave catches up | Low — Data loss risk is lower as Master waits for Slave acknowledgment |
| Performance | High performance (no waiting for acknowledgment) | Slight performance overhead due to waiting for Slave acknowledgment |
| Replication Latency | High — Slave may lag behind Master | Lower latency than Asynchronous Replication |
| Use Case | High-performance systems where data consistency isn't the highest priority | Systems requiring a balance between performance and data consistency |
কোনটি ব্যবহার করবেন?
- Asynchronous Replication: যদি আপনার সিস্টেমে ডেটার পড়ার (read) কাজ দ্রুত হওয়া গুরুত্বপূর্ণ হয় এবং ডেটা হারানো কম প্রভাব ফেলবে, তবে Asynchronous Replication একটি ভালো পছন্দ হতে পারে।
- Semi-Synchronous Replication: যদি আপনি ডেটার লিখা (write) এবং পড়ার (read) পারফরম্যান্সে ভাল ব্যালান্স চান এবং ডেটা সিঙ্ক্রোনাইজেশন বা কনসিস্টেন্সি প্রাধান্য দেয়, তবে Semi-Synchronous Replication ভাল অপশন।
সারাংশ
Asynchronous Replication এবং Semi-Synchronous Replication উভয়ই MySQL-এর ডেটাবেস সিঙ্ক্রোনাইজেশনের জন্য ব্যবহৃত হয়, তবে তাদের মধ্যে পার্থক্য হলো Asynchronous রেপ্লিকেশন দ্রুত কিন্তু কম সঠিক এবং Semi-Synchronous রেপ্লিকেশন ডেটা সঠিকতা নিশ্চিত করে কিন্তু কিছুটা ধীর হতে পারে। আপনার সিস্টেমের প্রয়োজন অনুসারে সঠিক রেপ্লিকেশন কনফিগারেশন নির্বাচন করা উচিত, যাতে পারফরম্যান্স এবং ডেটা সিকিউরিটি উভয়ের সঠিক ব্যালান্স বজায় থাকে।
Read more